From c89a659a35f1dd53c3c7e95d7f35a8e471cd0cea Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 10 Aug 2009 13:51:28 +0100 Subject: [PATCH] Revert alloc_idle_vcpu() to support multiple idle domains where max vcpus is less than max pcpus (e.g., can happen on i386). Signed-off-by: Keir Fraser --- xen/common/domain.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index a2507a7b3d..175d837eae 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -182,8 +182,19 @@ struct vcpu *alloc_vcpu( struct vcpu *alloc_idle_vcpu(unsigned int cpu_id) { - return idle_vcpu[cpu_id] ?: alloc_vcpu(idle_vcpu[0]->domain, - cpu_id, cpu_id); + struct domain *d; + struct vcpu *v; + unsigned int vcpu_id = cpu_id % MAX_VIRT_CPUS; + + if ( (v = idle_vcpu[cpu_id]) != NULL ) + return v; + + d = (vcpu_id == 0) ? + domain_create(IDLE_DOMAIN_ID, 0, 0) : + idle_vcpu[cpu_id - vcpu_id]->domain; + BUG_ON(d == NULL); + + return alloc_vcpu(d, vcpu_id, cpu_id); } static unsigned int extra_dom0_irqs, extra_domU_irqs = 8; -- 2.30.2